#ifndef BOOSTTESTSUPPORT_H_
#define BOOSTTESTSUPPORT_H_

#include <ext/hash_map>
#include <iostream>

#include <boost/test/unit_test.hpp>
#include <boost/shared_ptr.hpp>

namespace stdext
{
	using namespace __gnu_cxx;
}

class BoostTestEnv
{
public:
	const static int BIN_RUN_RAND_DETAILED = 0;
	const static int BIN_RUN_RAND_SHORT = 1;
	const static int BIN_RUN_RAND_SILENT = 2;

	static int getBinRunStatus();
	static int getBinRunTestCount();
	static int getFacilityAssociationRandomTestCount();
	static int getMaximalIndependentSetTestCount();
	static int getFactor3RandomSmallTestCount();
	static int getFactor3RandomTestCount();
	static bool getFactor3RandomPrintCost();

private:
	static int binRunStatus;
	static int binRunTestCount;
	static int facilityAssociationRandomTestCount;
	static int maximalIndependentSetTestCount;
	static bool factor3RandomPrintCost;
	static int factor3RandomCount;
	static int factor3RandomSmallCount;
};

#define IGNORE( comment ) std::cout << "\n\n\t**********\n" << "\t* IGNORE * " << comment << "\n\t**********\n\n"; return;

#define CRITICAL_CHECK( expr )							\
		if ( !(expr) ) {								\
			std::stringstream buf;						\
			buf << "\n\nCritical check fail: "			\
				<< #expr << "\nin"						\
				<< __FILE__ << ": " << __LINE__ << "\n";\
			throw buf.str();							\
		}

#endif /* BOOSTTESTSUPPORT_H_ */
